ABE
Section: User Commands (1)
Index
Return to Main Contents
NAME
abe - Ascii-Binary Encoder
SYNOPSIS
abe
[ options ] [filename ...]
DESCRIPTION
The
abe
program program encodes binary files into a bullet-proof form consisting
only of printable ASCII characters. This new form can be sent through
communications channels which might get upset at non-printable characters,
such as USENET news, mail and various text file downloading programs. ABE
files should be able to pass through a lot of mechanisms and Operating
Systems that will kill lesser files.
Abe
is a replacement for the
uuencode(1)
program. The encodings produced by
abe
are usually smaller, more compressible, more readable and far more
bullet-proof than those produced by
uuencode.
All lines in an ABE
encoding have a three character line number as well as a checksum. That
means that ABE lines may be broken apart, scrambled in a random order,
and even have garbage lines inserted into them without damage. The
sort(1)
program (or any other text file sort utility) can always restore an ABE file
to its proper state.
ABE files can be split into "blocks" when the transport mechanism being
used is unable to transfer files longer than a given length. These blocks
contain checksums, length information and `seek address' information for
independent verification. With the full
dabe
ABE decoder, it is possible to still decode a file with missing blocks.
Empty regions will simply be left undefined in the resulting file. If
redundant decoding information is added to the blocks, they can be presented
to the decoder in any order, without sorting, and blocks may even be
duplicated. All this was designed with the typical problems of USENET
binary distribution in mind.
Two decoders exist. One is the `tiny' decoder,
tinydabe.c.
This is a 100 line, public domain, portable C program which can be included
with ABE files. Thus any person with a C compiler can decode an ABE file,
even if they have never heard of ABE files before. It is limited to
single file encodings of less than 2 megabytes in size.
The full ABE decoder,
dabe,
more advanced decoding, with more error checking, is possible. It is
suggested that the tiny decoder only be used by first time users of the
format, and those who plan more work should endeavour to use the complete
decoder.
OPTIONS
(Note that while option names are displayed here in full, only the first
letter is actually required. For +/- options, using + turns the option on,
and using - turns the option off.)
- blocksize=num
-
Request that files be split into blocks with an approximate size of
num.
Note that files will actually be a little bit larger than the requested
size, so choose a number lower than your hard maximum. Blocks will be
put into the single output file unless an output file prefix name is
provided (p=name).
- prefix=str
-
Normally,
abe
writes encodings to the standard output. This option turns on file blocking,
and arranges for each block to go into a different file. All file names
will start with the prefix
str
and will have a 2-digit hexadecimal number at the end. The default block
size is 40,000 characters, but that may be set with the (b=num) option.
- prefix=|command
-
On UNIX systems, if the prefix string begins with an or-bar (|), the
blocks will actually be piped through a shell process using popen(3).
The shell command string passed to popen will be that generated by
sprintf(3) with the prefix string (excluding the or-bar) given as the
format string, and the file number given as an integer argument. For
example, on Unix:
abe b=25000 file "p=|mail -s 'Part%d' fbaggins"
would mail all the blocks, with titles, to user fbaggins. Note
that you must quote the whole option, or the or-bar will be taken as
a pipe character by the Unix shell.
- universalname=name
-
ABE encodings include both the real name of the encoded file and a special
universal name that is limited to 12 characters and should contain no
directory characters like slash. The universal name is used when decoding
on an operating system different from the encoder's system. Universal
names are also used when multiple files are placed in the same encoding.
If you don't provide a universal name, one will be formed from the real
file name. You can only provide your own universal name when encoding
a single file. If no filename is given, a universal name of "stdin" is used.
- decoder=pathname
-
Insert the source to the tiny ABE decoder "tinydabe.c" from the file
in
pathname.
- sample=size
-
abe
and do either a single pass or double pass over its input, except when
the input is the standard input, in which case only a single pass is possible.
abe
likes to do two passes so that it can get frequency tables for the bytes in
the input file. The more accurate the frequency tables, the smaller the
encoding. If two passes are not possible, or you request one-pass operation
with this option,
abe
reads in a buffer of size
size
and builds the frequency table from that. The default (for stdin) is
10,000 bytes. You can set it as high as the limit for dynamic memory
allocation on your system.
- linenumber=num
-
Normally ABE encodings start at line one. If you wish to concatenate two
encodings, you can start your second encoding at a higher line number with
this option. You give the number in decimal, although it will be output
in ABE's special format of 3 printable characters. Encodings that don't
start at line 1 will be rejected by the tiny dabe decoder.
- +redundant
-
In a blocked encoding, this option asks that redundant information be added
to each block, so that the file may be decoded without sorting
by the advanced ABE decoder,
even if blocks are missing, duplicated or in the wrong order.
- +decoder
-
Request that the source for the tiny ABE decoder be inserted into your
ABE encoding. The source is to be taken from the standard location
defined by your system administrator.
- +ebcdic
-
Use the ABE2 encoding, which is designed to pass through EBCDIC machines
without trouble. The ABE2 encoding does not make use of the following
characters: "![\]^`{|}~" -- they have all been reported to sometimes
not survive multiple ASCII<-->EBCDIC translations. It maps to 4 sets
of 64 characters, and produces encodings that are slightly larger.
- +uuencode
-
Use the UUENCODE encoding scheme. These scheme is totally unlike ABE
schemes, but is quite popular and sometimes a bit smaller on compressed
binary files. UUENCODE lines are formed from the 64 characters from space
to underbar, with a simple mapping that maps 4 printable characters to
3 binary bytes. Files produced with +uuencode can often be decoded by
uudecode(1) decoders after the application of sort and a simple sed(1)
script to remove the first four bytes of each line. If you use the -number
option, the sed script is not even necessary The UUENCODE format is
more prone to errors and usually is more bulky than either ABE format.
- -numbers
-
Remove line numbers and line checksums from most of the encoding. The
first few lines of every block will still have line numbers, but the
bulk of the encoding will not. This saves 4 bytes per line, reducing
the size of encodings by about 6%. Such encodings can't be decoded by
tinydabe decoders, nor can they be sorted. While they are more prone to
potential errors, most such errors occur between blocks, so removing the
line numbers is usually safe. When used with +uuencode, this option allows
encodings that can be decoded both with dabe(1) and uudecode(1).
OPERATION
Abe
can take input in 3 ways. The first is the standard input, which allows
abe
to be used at the end of a pipe. If the standard input is used,
abe
works in one-pass mode, and only reads the first part of the file to
figure out character mappings.
Abe
may also be given a single filename, in which case that file will be
encoded. An alternate output name can be provided with the "universalname="
option.
Abe
can also be given multiple files. The output will be roughly equivalent
to the concatenation of single-file ABE encodings, except the line numbers
will continue properly in sequence. This produces a sort of multi-file
archive, although
abe
is not intended to be used as an archiver. In fact, it is better to use
abe
on the output of general non-compressing archivers like tar(1) or cpio(1).
It can also be used on compressed archiver output, but generally it's
better to let the transport mechanism (usually USENET links) worry about
doing the compressing.
ENCODING FORMAT
In the standard ABE1 encoding, 256 bytes are broken up into 3 sets, with 86,
86 and 84 bytes,
respectively. The most common 86 bytes in the file go into set 0, and so
on. 86 of the printable ASCII characters are used to encode the members
of each set. Special printable escape characters switch from set to set.
In an ABE encoding, printable characters always map to themselves, if possible.
This means that printable character strings found in binary files are still
readable in an ABE encoding. You can often look at a raw ABE file and see
what it is, which is quite useful. In addition, the byte 0 maps to the
ASCII digit "0," and several other similar useful mappings are made.
ABE files also have header information that defines information about the
encoded files, block headings, sizes and checksums. For full details on
the encoding format, see the special file on that in the ABE kit.
The ABE2 encoding splits the 256 bytes into 4 sets of 64 bytes each.
It avoids certain dangerous characters.
Otherwise it is similar to ABE1. ABE2 encodings are only slightly larger,
and slightly less readable than ABE1 encodings
COMPRESSION
ABE files usually always use the same string of printable characters to
represent a given string of printable bytes. (This is not true for
uuencodings.) This is good for LZW compressors.
ABE encodings are very good on text files. In general, except for
the overhead of headers, checksums and line numbers, text files encode
to the same size in an ABE file. Sadly, ABE does its worst job on
compressed files. This "worst job" is usually about the same as the
job done by uuencode, plus the overhead of headers, checksums and line
numbers. In general, files posted to USENET should not be pre-compressed,
as compression should be left to the transportation mechanisms. (Most
USENET links batch and compress what they transmit.)
BLOCKING
The ABE blocking system is ideal for sending binaries over USENET and
other limited channels. Normally, ABE output is a continuous stream
sent to the standard output.
AUTHOR
The ABE system was written by Brad Templeton, who is brad@looking.on.ca.
(Mail regarding abe should go to abe@looking.on.ca.)
The tiny ABE decoder is released to the public domain. All other files
are Copyright 1989 by Brad Templeton. A licence for unlimited non-commercial
use of these encoders is granted. See the source code in the ABE kit
for full details on the licence.
No fee is requested or required for the use of these programs.
If you feel the need
to show appreciation, You might order copies of the REC.HUMOR.FUNNY
Computer Network Humour Annual(s) (a USENET jokebook) for 9.95 USD+S/H.
Mail to jokebook@looking.on.ca or call 519/884-7473. There is no requirement to
buy the jokebook in order to use these programs.
FILES
tinydabe.c
SEE ALSO
dabe(1),
uuencode(1),
ABE file format (abeformat)
VERSION
Version 1.0
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- OPTIONS
-
- OPERATION
-
- ENCODING FORMAT
-
- COMPRESSION
-
- BLOCKING
-
- AUTHOR
-
- FILES
-
- SEE ALSO
-
- VERSION
-
This document was created by
man2html,
using the manual pages.
Time: 11:18:47 GMT, November 24, 2024